package stone;
/**
 * 词法分析器使用的基本单词类。在英语中，word和token是不同的，但是翻译过来都是单词的意思
 * i=i+1 //increment
 * i=i+1
 * 词法分析结果："i" "=" "i" "+" "1"
 * stone可以省略;，如果有;号，必须作为一句的结尾
 * 
 * 词法分析器会把源程序视作字符串，并把它分割为若干单词。分割后的单词不是简单地用string对象表示
 * ，而是使用自定义的Token对象表示。
 * 记录单词对应的字符串，单词的类型，单词所处位置的行号等信息
 * 
 */
public abstract class Token {
    public static final Token EOF = new Token(-1){}; // end of file
    public static final String EOL = "\\n";          // end of line 
    private int lineNumber;

    protected Token(int line) {
        lineNumber = line;
    }
    /**
     * 获取第几行
     * @return
     */
    public int getLineNumber() { return lineNumber; }
    public boolean isIdentifier() { return false; }
    public boolean isNumber() { return false; }
    public boolean isString() { return false; }
    public int getNumber() { throw new StoneException("not number token"); }
    public String getText() { return ""; }
}
